#include <iostream>
#include <set>

int main() {
    // 声明一个整型 set 容器
    std::set<int> mySet;

    // set.empty()判断是否为空
    if(mySet.empty()){
        std::cout<<"myset is empty for now!"<<std::endl;
    }

    // set.insert()插入元素
    mySet.insert(10);
    mySet.insert(20);
    mySet.insert(30);
    mySet.insert(40);

    // std::cout<<"(end)last member: "<<*mySet.end() << std::endl;           //导致非法操作，可能会报错——end指向末尾的迭代器，不知想实际有效元素
    std::cout<<"(rbegin)last member: "<<*mySet.rbegin() << std::endl;
    std::cout<<"(begin)first member:"<<*mySet.begin() << std::endl;
    std::cout<<"(rend)first member:"<<*mySet.rend() << std::endl;


    mySet.insert(10);                                                          //值是唯一的，已经有10再插入10也没用

    // std::cout<<"last member:"<<*mySet.end() << std::endl;
    // std::cout<<"first member:"<<*mySet.begin() << std::endl;

    // 输出 set 中的元素
    std::cout << "Set contains: ";
    for (int num : mySet) {         //遍历 mySet 中的每一个元素，并将当前元素赋值给 num
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 查找元素
    if (mySet.find(20) != mySet.end()) {    //find()函数：如果 20 存在于集合中，find 会返回一个指向该元素的迭代器；如果不存在，则返回 mySet.end()
        std::cout << "20 is in the set." << std::endl;
    } else {
        std::cout << "20 is not in the set." << std::endl;
    }

    // 删除元素
    mySet.erase(20);

    // 再次输出 set 中的元素
    std::cout << "After erasing 20, set contains: ";
    for (int num : mySet) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 检查 set 是否为空
    if (mySet.empty()) {
        std::cout << "The set is empty." << std::endl;
    } else {
        std::cout << "The set is not empty." << std::endl;
    }

    // 输出 set 中元素的数量
    std::cout << "The set contains " << mySet.size() << " elements." << std::endl;

    return 0;
}